//
//  Quaternions.h
//  3DMathSDK
//
//  Created by admin on 16/7/12.
//  Copyright © 2016年 douyu. All rights reserved.
//

#ifndef Quaternions_h
#define Quaternions_h

#include <stdio.h>
#include <stdbool.h>
#include "DataType.h"

extern const Quaternions kQuaternionsZero;

bool isQuaternionsEqual(Quaternions q1, Quaternions q2);

Quaternions QuaternionsMake(float w, float x, float y, float z);

// 旋转四元数
Quaternions rotateQuaternions(Vector3 vector, float angle);

// 四元数的模
float moduloQuaternions(Quaternions quaternions);

// 四元数的逆
Quaternions inverseQuaternions(Quaternions q);

// 书上自定义的四元数的叉乘
Quaternions crossProductQuaternions(Quaternions q1, Quaternions q2);

// 数学上四元数的叉乘
Quaternions crossProductQuaternions1(Quaternions q1, Quaternions q2);

// 两个四元数角位移的四元数
Quaternions displacementQuaternions(Quaternions q1, Quaternions q2);

// 四元数点乘
float dotProductQuaternions(Quaternions q1, Quaternions q2);

// 四元数的幂
Quaternions powQuaternions(Quaternions q, float exponent);

// 四元数平滑插值
Quaternions slerp(Quaternions q1, Quaternions q2, float t);

#endif /* Quaternions_h */
